package com.gengzp.rpc.factory;

import com.gengzp.rpc.core.RpcRemoteTransactionRollbackProcessor;
import com.gengzp.rpc.interceptor.RpcRemoteCallInterceptor;
import com.gengzp.rpc.strategy.RpcRegisterCenterStrategy;
import com.gengzp.rpc.strategy.RpcRemoteServiceRouteStrategy;

/**
 * @ClassName RpcBeanInstanceFactory
 * @Description rpc框架bean实例工厂
 * @Author gengzp
 * @Date 2025/8/20 17:32
 */
public interface RpcBeanInstanceFactory {

    /**
     * 获取rpc远程服务路由策略实例
     * <p> 该方法会读取环境变量中的注册中心, 获取对应的路由实例 </p>
     *
     * @return rpc远程服务路由策略实例
     */
    RpcRemoteServiceRouteStrategy getRpcRemoteServiceRouteStrategy();

    /**
     * 获取rpc请求拦截器实例
     * <p> 该方法会优先返回用户自定义的拦截器实例 </p>
     *
     * @return rpc请求拦截器实例
     */
    RpcRemoteCallInterceptor getRpcRequestInterceptor();

    /**
     * 获取rpc远程事务回滚处理器实例
     * <p> 该方法会优先返回用户自定义的回滚处理器实例 </p>
     *
     * @return rpc远程事务回滚处理器
     */
    RpcRemoteTransactionRollbackProcessor getRpcRemoteTransactionRollbackProcessor();

    /**
     * 获取rpc注册中心策略实例
     * <p> 该方法会返回当前配置的注册中心对应的实例类 </p>
     *
     * @return rpc注册中心策略实例
     */
    RpcRegisterCenterStrategy getRpcRegisterCenterStrategy(String registerCenterBeanName);

}
